package com.j2eefast.produce.pms.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.j2eefast.common.core.business.annotaion.BussinessLog;
import com.j2eefast.common.core.controller.BaseController;
import com.j2eefast.common.core.enums.BusinessType;
import com.j2eefast.common.core.utils.PageUtil;
import com.j2eefast.common.core.utils.ResponseData;
import com.j2eefast.common.core.utils.ToolUtil;
import com.j2eefast.common.core.utils.ValidatorUtil;
import com.j2eefast.framework.annotation.RepeatSubmit;
import com.j2eefast.framework.sys.entity.SysUserEntity;
import com.j2eefast.framework.sys.service.SysUserService;
import com.j2eefast.framework.utils.Constant;
import com.j2eefast.framework.utils.Global;
import com.j2eefast.framework.utils.UserUtils;
import com.j2eefast.produce.pms.entity.PmsSampleEntryEntity;
import com.j2eefast.produce.pms.entity.PmsSampleOutputEntity;
import com.j2eefast.produce.pms.service.PmsSampleOutputService;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>生产管理样品出入库管理</p>
 *
 * @author: summer
 * @date: 2020-04-27 22:03
 * @web: http://www.j2eefast.com
 * @version: 1.0.1
 */
@Controller
@RequestMapping("/pms/output")
public class PmsSampleOutputController extends BaseController {
    private String urlPrefix = "modules/pms/output";
    @Autowired
    private PmsSampleOutputService pmsSampleOutputService;
    @Autowired
    private SysUserService sysUserService;

    @RequiresPermissions("pms:output:view")
    @GetMapping()
    public String process() {
        return urlPrefix + "/index";
    }

    @RequestMapping("/list")
    @RequiresPermissions("pms:output:list")
    @ResponseBody
    public ResponseData list(@RequestParam Map<String, Object> params) {
        PageUtil page = pmsSampleOutputService.findPage(params);
        return success(page);
    }

    /**
     * 删除
     */
    @BussinessLog(title = "删除", businessType = BusinessType.DELETE)
    @RequestMapping(value = "/del", method = RequestMethod.POST)
    @RequiresPermissions("pms:output:del")
    @RequiresRoles(Constant.SU_ADMIN)
    @ResponseBody
    public ResponseData delete(Long[] ids) {
        return pmsSampleOutputService.deleteByIds(ids) ? success() : error("删除失败!");
    }


    /**
     * 修改出入库 页面
     */
    @RequiresPermissions("pms:output:edit")
    @GetMapping("/edit/{id}")
    public String edit(@PathVariable("id") String id, ModelMap mmap) {
        PmsSampleOutputEntity pmsSampleOutputEntity = pmsSampleOutputService.getById(id);
        mmap.put("outputEntity", pmsSampleOutputEntity);
        return urlPrefix + "/edit";
    }

    /**
     * 修改出入库保存
     */
    @RepeatSubmit
    @RequiresPermissions("pms:output:edit")
    @BussinessLog(title = "修改", businessType = BusinessType.UPDATE)
    @RequestMapping(value = "/edit", method = RequestMethod.POST)
    @ResponseBody
    public ResponseData edit(PmsSampleOutputEntity pmsSampleOutputEntity) {
        ValidatorUtil.validateEntity(pmsSampleOutputEntity);
        return pmsSampleOutputService.updateById(pmsSampleOutputEntity) ? success() : error("修改失败!");
    }

    /**
     * 新增参数配置
     */
    @RequiresPermissions("pms:output:add")
    @GetMapping("/add")
    public String add() {
        return urlPrefix + "/add";
    }


    /**
     * 新增保存
     */
    @RepeatSubmit
    @RequiresPermissions("pms:output:add")
    @BussinessLog(title = "认领", businessType = BusinessType.INSERT)
    @RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public ResponseData addSave(@Validated PmsSampleOutputEntity pmsSampleOutputEntity) {
        //校验参数
        ValidatorUtil.validateEntity(pmsSampleOutputEntity);
//		Long userId= UserUtils.getUserInfo().getId();
//		SysUserEntity sysUserEntity=pmsSampleOutputService.getSysById(userId);
//		pmsSampleOutputEntity.setRegisterName(sysUserEntity.getName());
        String userName = UserUtils.getUserInfo().getName();
        pmsSampleOutputEntity.setCreateBy(userName);
        return pmsSampleOutputService.save(pmsSampleOutputEntity) ? success() : error("新增失败!");
    }

    /**
     * 修改出入库保存
     */

    @RequiresPermissions("pms:output:checkout")
    @BussinessLog(title = "出库", businessType = BusinessType.INSERT)
    @RequestMapping(value = "/checkout", method = RequestMethod.POST)
    @ResponseBody
//	@GetMapping("/checkout/{id}")
    public ResponseData checkout(String id, ModelMap mmap) {
        System.out.println("1111111111111111111111");
        ValidatorUtil.validateEntity(id);
        Long ids = Long.parseLong(id);
        return pmsSampleOutputService.updateCheck(ids) ? success() : error("修改失败!");
    }

    @BussinessLog(title = "校验", businessType = BusinessType.EXPORT)
    @RequiresPermissions("pms:output:export")
    @PostMapping("/export")
    @ResponseBody
    public ResponseData export(@RequestParam Map<String, Object> params) throws Exception {
        String fileName = "校验";
        fileName = ToolUtil.encodingExcelFilename(fileName);
        String folder = Global.getTempPath() + File.separator + "pio" + File.separator;
        List<PmsSampleOutputEntity> listData = pmsSampleOutputService.findList(params);
//内容样式策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
//垂直居中,水平居中
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
//设置 自动换行
        contentWriteCellStyle.setWrapped(true);
// 字体策略
        WriteFont contentWriteFont = new WriteFont();
// 字体大小
        contentWriteFont.setFontHeightInPoints((short) 12);
        contentWriteCellStyle.setWriteFont(contentWriteFont);
//头策略使用默认
        //excel如需下载到本地,只需要将response.getOutputStream()换成File即可(注释掉以上response代码)
        EasyExcel.write(folder + fileName, PmsSampleOutputEntity.class)
                //设置输出excel版本,不设置默认为xlsx
                .excelType(ExcelTypeEnum.XLS).head(PmsSampleOutputEntity.class)
                //设置拦截器或自定义样式
//				.registerWriteHandler(new MonthSheetWriteHandler())
//				.registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle))
                .sheet("校验")
                //设置默认样式及写入头信息开始的行数
                .useDefaultStyle(true).relativeHeadRowIndex(3)
                //这里的addsumColomn方法是个添加合计的方法,可删除
                .doWrite(listData);

        return success(fileName);
    }


}
